﻿using System;
using TheOutLetLibrary.Dominio;
using System.Data.OleDb;

namespace TheOutLetLibrary.Infraestrutura {

    public class AccessProdutoDAO: BaseDAO, IProdutoDAO {

        public AccessProdutoDAO(OleDbTransaction transacao)
            : base(transacao) {
        }

        public Produto Ache(int idEmpresa, string modeloMarca) {

            OleDbCommand comando = GetCommand();

            comando.CommandText =
                "SELECT * FROM tb_produto " +
                "WHERE XID_EMPRESA = @XID_EMPRESA AND CD_MODELO_MARCA = @CD_MODELO_MARCA";
            comando.Parameters.Add("XID_EMPRESA", OleDbType.Integer).Value = idEmpresa;
            comando.Parameters.Add("@CD_MODELO_MARCA", OleDbType.VarChar).Value = modeloMarca;

            OleDbDataReader reader = comando.ExecuteReader();

            if(reader.HasRows) {
                reader.Read();
                return new Produto {
                    XID_PRODUTO = reader.GetInt32(reader.GetOrdinal("XID_PRODUTO")),
                    CD_MODELO_MARCA = reader.GetString(reader.GetOrdinal("CD_MODELO_MARCA")),
                    CFOP = reader.GetString(reader.GetOrdinal("CFOP")),
                    DSC_MODELO_MARCA = reader.GetString(reader.GetOrdinal("DSC_MODELO_MARCA")),
                    DSC_MODELO_TOTLET = reader.GetString(reader.GetOrdinal("DSC_MODELO_TOTLET")),
                    NCM = reader.GetString(reader.GetOrdinal("NCM")),
                    PRECO_CONSIGNADO = reader.GetDecimal(reader.GetOrdinal("PRECO_CONSIGNADO")),
                    PRECO_POR = reader.GetDecimal(reader.GetOrdinal("PRECO_POR"))
                };
            } else {
                return null;
            }
        }

        public int AcheOuInclua(Produto produto) {

            Produto produtoNaBase = Ache(produto.XID_EMPRESA, produto.CD_MODELO_MARCA);

            if(produtoNaBase == null) {

                OleDbCommand comando = GetCommand();

                comando.CommandText =
                    "INSERT INTO tb_produto (XID_EMPRESA, CD_MODELO_MARCA, DSC_MODELO_MARCA, " +
                    " DSC_MODELO_TOTLET, NCM, CFOP, PRECO_CONSIGNADO , PRECO_POR) " +
                    " VALUES (@XID_EMPRESA, @CD_MODELO_MARCA, @DSC_MODELO_MARCA, " +
                    " @DSC_MODELO_TOTLET, @NCM, @CFOP, @PRECO_CONSIGNADO, @PRECO_POR)";
                comando.Parameters.Add("@XID_EMPRESA", OleDbType.Integer).Value = produto.XID_EMPRESA;
                comando.Parameters.Add("@CD_MODELO_MARCA", OleDbType.VarChar).Value = produto.CD_MODELO_MARCA;
                comando.Parameters.Add("@DSC_MODELO_MARCA", OleDbType.VarChar).Value = produto.DSC_MODELO_MARCA;
                comando.Parameters.Add("@DSC_MODELO_TOTLET", OleDbType.VarChar).Value = produto.DSC_MODELO_TOTLET;
                comando.Parameters.Add("@NCM", OleDbType.VarChar).Value = produto.NCM;
                comando.Parameters.Add("@CFOP", OleDbType.VarChar).Value = produto.CFOP;
                comando.Parameters.Add("@PRECO_CONSIGNADO", OleDbType.Currency).Value = produto.PRECO_CONSIGNADO;
                comando.Parameters.Add("@PRECO_POR", OleDbType.Currency).Value = produto.PRECO_POR;
                comando.ExecuteNonQuery();

                comando.CommandText = "SELECT @@IDENTITY";
                produto.XID_PRODUTO = Convert.ToInt32(comando.ExecuteScalar());
                return produto.XID_PRODUTO;
               
            } else {
                return produtoNaBase.XID_PRODUTO;
            }

        }

    }

}
